package com.cskaoyan.javase.string._3exercise;

/**
 * @description: 小练习2
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * >  使用加号对字符串进行拼接操作，会有下述两种结果
 * >  - 直接在常量池中创建新的拼接对象
 * >  - 在堆上创建新的拼接对象
 * >
 * >  经过测试我们发现
 * >  - 当参与字符串拼接的两个字符串中，至少有一个是以引用变量的形式出现时
 * >   - 必然会在堆上创建新的字符串对象
 * >     - 原因是变量参与了运算，无法在编译时期确定其值，就不能在编译时期加入常量池
 * >  - 只有参与字符串拼接运算的两个字符串，都是字符串字面值常量的时候
 * >   - 此时不会在堆上创建新的字符串对象，而是在常量池中直接拼接创建对象
 * >   - 如果已存在，则不创建新的对象
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "world";
        String s3 = "helloworld";
        System.out.println(s3 == (s1 + s2)); //false
        System.out.println(s3.equals(s1 + s2)); //true

        System.out.println(s3 == ("hello" + "world")); //true
        System.out.println(s3.equals("hello" + "world")); //true
    }
}
